<?php
/**
 * TimeMath.php
 * Fri Apr 27 18:02:57 JST 2007
 * @author qqinxl
 * @package models_other
 * @subpackage timemath
 * LICENSE 
 *
 * @copyright  Copyright (c) lin-international
 */

/**
 * @package models_other
 * @subpackage timemath
 */
class Util_TimeMath  {
	/**
         * 获得当前的时间 格式：Y-m-d G:i:s
         * @return date
	 */
	public static function getDateTime(){
		return date("Y-m-d G:i:s");
	}
	/**
         * 获得当前的时间 格式：Y-m-d
         * @return date
	 */
	public static function getDate(){
		return date("Y-m-d");
	}

	/**
         * 获得24小时前的时间 格式：Y-m-d G:i:s
         * @return date
	 */
	public static function getYesterdayTime(){
		$preDateTime = time() - (24 * 60 * 60);
		return date('Y-m-d G:i:s', $preDateTime);
	}
	/**
         * 获得24小时后的时间  格式：Y-m-d G:i:s
         * @return date
	 */
	public static function getTomorrowTime(){
		$postDateTime = time() + (24 * 60 * 60);
		return date('Y-m-d G:i:s', $postDateTime);
	}
	/**
         * 获得某一时间间隔前的时间 格式：Y-m-d G:i:s
         * @param int $time  时间间隔，精确到毫秒
         * @param int $starttime 从某一时刻开始 默认是当前时间
         * @return date
	 */	
	public static function getPreDateTime($time = null,$starttime = null){
		if(empty($time)){
			return self::getYesterdayTime();
		}
		/*if(!is_int($time)){
		throw new Exception('Time Error');
		}*/
		if(empty($starttime)){
			$preDateTime = time() - $time;
		}else{
			$preDateTime = strtotime($starttime) - $time;
		}
		return date('Y-m-d G:i:s', $preDateTime);
	}
	/**
         * 获得某一时间间隔后的时间 格式：2007-04-27 18:27:59
         * @param int $time  时间间隔，精确到毫秒
         * @param int $starttime 从某一时刻开始 默认是当前时间
         * @return date
	 */
	public static function getPostDateTime($time = null,$starttime = null){
		if(empty($time)){
			return self::getTomorrowTime();
		}
		if(!is_int($time)){
			throw new Exception('Time Error');
		}
		if(empty($starttime)){
			$postDateTime = time() + $time;
		}else{
			$postDateTime = strtotime($starttime) + $time;
		}
		return date('Y-m-d G:i:s', $postDateTime);
	}
	/**
         * 两个时间之间差
         * @param date $time  格式：2007-04-27 18:27:59
         * @param date $time  格式：2007-04-27 18:27:59
         * @return int 时间间隔，精确到毫秒
	 */
	public static function getTimeDifference($time1,$time2){
		if(!self::validateTime($time1) or !self::validateTime($time2)){
			throw new Exception('Time Error');
		}
		return strtotime($time1)-strtotime($time2);
	}

	/**
	 * 验证是否属于时间类型
         * @param string $value
         * @return bool
	 */
	static  function validateTime($value){		
		$validater = new Zend_Validate_Date();
		//2007-04-03 12:12:36
		//date("Y-m-d G:i:s");
		return $validater->isValid($value);		
	}
	/**
	 * 求年龄
	 * @param string $time 格式：2007-04-27 18:27:59
	 * @return int
	*/
	static function getAge($time){
		$_tt = self::getTimeDifference(self::getDateTime(),$time);
		return (int)($_tt/365/24/60/60);		
	}
	/**
	 * 获得年月日信息
	 * @param string $time 格式：2007-04-27 18:27:59
	 * @return array
	*/
	static function getYearMonDay($time){
		if(self::validateTime($time)){
			$time = strtotime($time);
		}
		if(!empty($time) and is_int($time)){
			return getdate($time);
		}else{
			return null;
		}
	}
}